import requests, datetime
import io, os, json, re
from config import conf
from common.log import logger
from lib import itchat
from lib.itchat.content import *
from lib.midjourney.sender import Sender
from common.baiduyun_translate import BaiduTranslate
from common.wechat_actions import handler_actions
from multiprocessing import Process
from concurrent.futures import ThreadPoolExecutor
from common.expired_dict import ExpiredDict


# 订阅私聊消息
@itchat.msg_register(TEXT)
def handler_single_msg(msg):
    '''
    :param msg: {'MsgId': '5050955702692243306', 'FromUserName': '@27e2cb58830b3f219b674b37a709906d043af73eb8abbd9acb4b6edee38be521', 'ToUserName': '@e7260977c3645fd22582ad139d7aac4ecf824a6a89f944bda0084f308203ded5', 'MsgType': 1, 'Content': '你好', 'Status': 3, 'ImgStatus': 1, 'CreateTime': 1682610726, 'VoiceLength': 0, 'PlayLength': 0, 'FileName': '', 'FileSize': '', 'MediaId': '', 'Url': '', 'AppMsgType': 0, 'StatusNotifyCode': 0, 'StatusNotifyUserName': '', 'RecommendInfo': {'UserName': '', 'NickName': '', 'QQNum': 0, 'Province': '', 'City': '', 'Content': '', 'Signature': '', 'Alias': '', 'Scene': 0, 'VerifyFlag': 0, 'AttrStatus': 0, 'Sex': 0, 'Ticket': '', 'OpCode': 0}, 'ForwardFlag': 0, 'AppInfo': {'AppID': '', 'Type': 0}, 'HasProductId': 0, 'Ticket': '', 'ImgHeight': 0, 'ImgWidth': 0, 'SubMsgType': 0, 'NewMsgId': 5050955702692243306, 'OriContent': '', 'EncryFileName': '', 'User': <User: {'MemberList': <ContactList: []>, 'Uin': 0, 'UserName': '@27e2cb58830b3f219b674b37a709906d043af73eb8abbd9acb4b6edee38be521', 'NickName': '贾一飞', 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon?seq=606987151&username=@27e2cb58830b3f219b674b37a709906d043af73eb8abbd9acb4b6edee38be521&skey=@crypt_c0e04a07_fc73bd245e4863b8582c5d0cb61974cf', 'ContactFlag': 3, 'MemberCount': 0, 'RemarkName': '', 'HideInputBarFlag': 0, 'Sex': 1, 'Signature': '该考虑如何使用自己的积累了', 'VerifyFlag': 0, 'OwnerUin': 0, 'PYInitial': 'JYF', 'PYQuanPin': 'jiayifei', 'RemarkPYInitial': '', 'RemarkPYQuanPin': '', 'StarFriend': 0, 'AppAccountFlag': 0, 'Statues': 0, 'AttrStatus': 102757, 'Province': '北京', 'City': '', 'Alias': '', 'SnsFlag': 257, 'UniFriend': 0, 'DisplayName': '', 'ChatRoomId': 0, 'KeyWord': '', 'EncryChatRoomId': '', 'IsOwner': 0}>, 'Type': 'Text', 'Text': '你好'}
    :return: action_list
    '''
    logger.info(msg)
    WeixinMjRobot().handler_single_msg(msg)

# 订阅群聊消息
@itchat.msg_register(TEXT, isGroupChat=True)
def handler_group_msg(msg):
    WeixinMjRobot().handler_group_msg(msg)

class WeixinMjRobot():
    def __init__(self):
        self.config = conf()
        self.conn = self.config.get("mysql")
        self.mjsender = Sender(
            authorization=self.config.get("authorization"),
            channelid=self.config.get("channelid"),
            application_id=self.config.get("application_id"),
            guild_id=self.config.get("guild_id"),
            session_id=self.config.get("session_id"),
            version=self.config.get("version"),
            id=self.config.get("id"),
            flags=self.config.get("flags"),
            proxy=self.config.get("proxy")
        )

    def start(self):
        itchat.instance.receivingRetryCount = 600  # 修改断线超时时间

        try:
            itchat.auto_login(enableCmdQR=2, hotReload=True)
        except:
            logger.error("Hot reload failed, try to login without hot reload")
            itchat.logout()
            os.remove("itchat.pkl")
            itchat.auto_login(enableCmdQR=2, hotReload=True)

        self.user_id = itchat.instance.storageClass.userName
        self.name = itchat.instance.storageClass.nickName
        logger.info("Wechat login success, user_id: {}, nickname: {}".format(self.user_id, self.name))
        # start message listener
        itchat.run()

    def handler_group_msg(self, msg):
        group_name=msg["User"]["NickName"]
        group_name_white_list=self.config.get("group_name_white_list")
        if group_name_white_list!=None and 'ALL_GROUP' in group_name_white_list:
            pass
        elif group_name_white_list!=None and group_name in group_name_white_list:
            pass
        else:
            return None

        self.conn.ping(reconnect=True)
        cursor = self.conn.cursor()

        if msg["Content"].startswith("/help"):
            itchat.send(
                "@{} 欢迎使用MJBOT机器人\n------------------------------\n🎨 生成图片命令 \n输入: /imagine prompt\n<prompt> 即你向mj提的绘画需求\n------------------------------\n🌈 变换图片命令 ️\n输入: /up asdf1234567 U1\n输入: /up asdf1234567 V1\n<asdf1234567> 代表消息ID，<U>代表放大，<V>代表细致变化，<1>代表第几张图\n------------------------------\n📕 附加参数\n1.解释：附加参数指的是在prompt后携带的参数，可以使你的绘画更加别具一格· 输入 /imagine prompt --v 5 --ar 16:9\n2.使用：需要使用--key value ，key和value之间需要空格隔开，每个附加参数之间也需要空格隔开\n3.详解：上述附加参数解释 <v>版本key <5>版本号 <ar>比例key，<16:9>比例value\n------------------------------\n📗 附加参数列表\n1.(--version) 或 (--v) 《版本》 参数 1，2，3，4，5 默认5，不可与niji同用\n2.(--niji)《卡通版本》 参数 空或 5 默认空，不可与版本同用\n3.(--aspect) 或 (--ar) 《横纵比》 参数 n:n ，默认1:1 ，不同版本略有差异，具体详见机器人提示\n4.(--chaos) 或 (--c) 《噪点》参数 0-100 默认0\n5.(--quality) 或 (--q) 《清晰度》参数 .25 .5 1 2 分别代表，一般，清晰，高清，超高清，默认1\n6.(--style) 《风格》参数 4a,4b,4c (v4)版本可用，参数 expressive,cute (niji5)版本可用\n7.(--stylize) 或 (--s)) 《风格化》参数 1-1000 v3 625-60000\n8.(--seed) 《种子》参数 0-4294967295 可自定义一个数值配合(sameseed)使用\n9.(--sameseed) 《相同种子》参数 0-4294967295 可自定义一个数值配合(seed)使用\n10.(--tile) 《重复模式》参数 空".format(msg['ActualNickName']),
                toUserName=msg['FromUserName']
            )

        if msg["Content"].startswith("/imagine"):
            # 敏感词提示
            cursor.execute("SELECT word FROM tb_sensitive_word")
            for word_info in cursor.fetchall():
                sensitive_word = word_info[0]
                if sensitive_word in msg["Content"]:
                    itchat.send(
                        "❌(•'╻'• ۶)۶当前prompt检测到敏感词！！！",
                        toUserName=msg['FromUserName']
                    )
                    return None

            # 如果开头包含 /imagine 则发送 prompt 后回复消息已收到
            origin_prompt = msg["Content"].replace("/imagine", "").replace("'", " ").replace("\n", " ")

            # 获取 trans_prompt
            baidu = BaiduTranslate()
            pic_url_list = re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', origin_prompt)
            if len(pic_url_list) > 0:
                # itchat.send(
                #     "⚠️( 。ớ ₃ờ)ھ图生图是私聊专属功能，请联系群主获取私聊密钥哦～",
                #     toUserName=msg['FromUserName']
                # )
                # return None

                origin_prompt_without_pic = origin_prompt
                # 如果是图生图，将图片链接过滤掉再翻译
                for pic_url in pic_url_list:
                    origin_prompt_without_pic = origin_prompt_without_pic.replace(pic_url, "")
                # 获取 trans_prompt
                trans_prompt = baidu.translate(origin_prompt_without_pic.split('--')[0]).get("result").get('trans_result')[0]['dst'].replace("'", " ").strip()[0:1500]
                trans_prompt = re.sub(r'[^a-zA-Z0-9\s]+', '', trans_prompt).lower()
                print(trans_prompt)
                # 加参数 加图片链接
                final_prompt = " ".join(pic_url_list) + " " + trans_prompt + " " + origin_prompt.replace(origin_prompt.split('--')[0], "")
                print(final_prompt)
            else:
                # 如果不是图生图
                # 获取 trans_prompt
                trans_prompt = baidu.translate(origin_prompt.split('--')[0]).get("result").get('trans_result')[0]['dst'].replace("'", " ").strip()[0:1500]
                trans_prompt = re.sub(r'[^a-zA-Z0-9\s]+', '', trans_prompt).lower()
                print(trans_prompt)
                final_prompt = trans_prompt + " " + origin_prompt.replace(origin_prompt.split('--')[0], "")
                print(final_prompt)

            self.mjsender.send(final_prompt)
            cursor.execute(
                "INSERT INTO `Robot`.`tb_mj_task` (`origin_prompt`, `trans_prompt`, `wx_user_id`, `wx_nickname`, `image_url`, `status`, `mj_task_id`, `wx_bot_user_id`) VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}')".format(
                    origin_prompt,
                    trans_prompt,
                    msg['FromUserName'],
                    msg['ActualNickName'],
                    "",
                    "sent",
                    "0",
                    itchat.instance.storageClass.userName
                ))
            self.conn.commit()
            cursor.execute(
                "SELECT id FROM `Robot`.`tb_mj_task` WHERE `origin_prompt`='{}' and `trans_prompt`='{}' and `wx_user_id`='{}' and `wx_nickname`='{}' and `image_url`='{}' and `status`='{}' and `mj_task_id`='{}' and `wx_bot_user_id`='{}'".format(
                    origin_prompt,
                    trans_prompt,
                    msg['FromUserName'],
                    msg['ActualNickName'],
                    "",
                    "sent",
                    "0",
                    itchat.instance.storageClass.userName
                ))
            temp_id=cursor.fetchall()[0][0]
            itchat.send(
                "@{} \n🚀任务已经发送至 Midjourney\n🌟任务 ID：{}\n✨prompt: {}".format(msg['ActualNickName'], temp_id, origin_prompt),
                toUserName=msg['FromUserName']
            )

        if msg["Content"].startswith("/up"):
            up_info = msg["Content"].split(" ")
            if len(up_info) == 3:
                # 查询 message_info
                cursor.execute("SELECT mj_done_msg FROM `Robot`.`tb_mj_task` WHERE `id`='{}'".format(up_info[1]))
                mj_done_msg_str = cursor.fetchall()[0][0]
                if mj_done_msg_str != None:
                    mj_done_msg = json.loads(mj_done_msg_str)
                    print(mj_done_msg["components"])


                    u_component = mj_done_msg["components"][0]["components"]
                    for component in u_component:
                        if component.get("label") == up_info[2]:
                            print("进行 {} 变换".format(up_info[2]))
                            print(component)
                            self.mjsender.send_UVX(
                                message_id=mj_done_msg["id"],
                                custom_id=component["custom_id"],
                                component_type=component["type"]
                            )
                            # 将变换任务定义为普通任务入库
                            cursor.execute(
                                "INSERT INTO `Robot`.`tb_mj_task` (`origin_prompt`, `trans_prompt`, `wx_user_id`, `wx_nickname`, `image_url`, `status`, `mj_task_id`, `wx_bot_user_id`) VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}')".format(
                                    up_info[2],
                                    "",
                                    msg['FromUserName'],
                                    msg['ActualNickName'],
                                    "",
                                    "sent",
                                    mj_done_msg["id"],
                                    itchat.instance.storageClass.userName
                                ))
                            self.conn.commit()
                            cursor.execute(
                                "SELECT id FROM `Robot`.`tb_mj_task` WHERE `origin_prompt`='{}' and `trans_prompt`='{}' and `wx_user_id`='{}' and `wx_nickname`='{}' and `image_url`='{}' and `status`='{}' and `mj_task_id`='{}' and `wx_bot_user_id`='{}'".format(
                                    up_info[2],
                                    "",
                                    msg['FromUserName'],
                                    msg['ActualNickName'],
                                    "",
                                    "sent",
                                    mj_done_msg["id"],
                                    itchat.instance.storageClass.userName
                                ))
                            temp_id = cursor.fetchall()[0][0]
                            # 发送变换任务入库的信息
                            itchat.send(
                                "@{} \n✅你的变换任务已提交\n🌟原始任务 ID：{}\n🌟变换任务 ID: {}\n💫变换类型: {}\n🚀正在快速处理中,请稍后!".format(msg['ActualNickName'], up_info[1], temp_id, up_info[2]),
                                toUserName=msg['FromUserName']
                            )



                    v_component = mj_done_msg["components"][1]["components"]
                    for component in v_component:
                        if component.get("label") == up_info[2]:
                            print("进行 {} 变换".format(up_info[2]))
                            print(component)
                            self.mjsender.send_UVX(
                                message_id=mj_done_msg["id"],
                                custom_id=component["custom_id"],
                                component_type=component["type"]
                            )
                            # 将变换任务定义为普通任务入库
                            cursor.execute(
                                "INSERT INTO `Robot`.`tb_mj_task` (`origin_prompt`, `trans_prompt`, `wx_user_id`, `wx_nickname`, `image_url`, `status`, `mj_task_id`, `wx_bot_user_id`) VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}')".format(
                                    up_info[2],
                                    "",
                                    msg['FromUserName'],
                                    msg['ActualNickName'],
                                    "",
                                    "sent",
                                    mj_done_msg["id"],
                                    itchat.instance.storageClass.userName
                                ))
                            self.conn.commit()
                            cursor.execute(
                                "SELECT id FROM `Robot`.`tb_mj_task` WHERE `origin_prompt`='{}' and `trans_prompt`='{}' and `wx_user_id`='{}' and `wx_nickname`='{}' and `image_url`='{}' and `status`='{}' and `mj_task_id`='{}' and `wx_bot_user_id`='{}'".format(
                                    up_info[2],
                                    "",
                                    msg['FromUserName'],
                                    msg['ActualNickName'],
                                    "",
                                    "sent",
                                    mj_done_msg["id"],
                                    itchat.instance.storageClass.userName
                                ))
                            temp_id = cursor.fetchall()[0][0]
                            # 发送变换任务入库的信息
                            itchat.send(
                                "@{} \n✅你的变换任务已提交\n🌟原始任务 ID：{}\n🌟变换任务 ID：{}\n💫变换类型: {}\n🚀正在快速处理中,请稍后!".format(msg['ActualNickName'], up_info[1], temp_id, up_info[2]),
                                toUserName=msg['FromUserName']
                            )

            else:
                itchat.send(
                    "@{} \n❌请输入正确的格式哦：/up 任务id 变换类型".format(msg['ActualNickName']),
                    toUserName=msg['FromUserName']
                )
            pass

        cursor.close()

    def handler_single_msg(self, msg):

        self.conn.ping(reconnect=True)
        cursor = self.conn.cursor()

        if str(self.config.get("is_site_text_secret_on")) == "1":
            # 如果是私聊，则先看看这个用户是否有私聊权限
            cursor.execute("SELECT * FROM tb_site_text_secret where user_id='{}' order by update_time desc".format(
                msg['FromUserName']))
            user_secret_infos = cursor.fetchall()
            if len(user_secret_infos) == 0:
                # 无激活信息，判断数据库中是否有过对应的卡密
                cursor.execute(
                    "SELECT * FROM tb_site_text_secret where secret='{}' and user_id=0 order by update_time desc".format(
                        msg["Content"]))
                secret_secret_info = cursor.fetchall()
                if len(secret_secret_info) == 0:
                    # 不是卡密信息 or 卡密已被激活，不做处理
                    return None
                else:
                    # 激活并回复文案
                    cursor.execute(
                        "UPDATE tb_site_text_secret SET user_id='{}' WHERE secret = '{}'".format(
                            msg['FromUserName'], msg["Content"]
                        )
                    )
                    self.conn.commit()
                    cursor.execute(
                        "UPDATE tb_site_text_secret SET update_time='{}' WHERE secret = '{}'".format(
                            datetime.datetime.now(), msg["Content"]
                        )
                    )
                    self.conn.commit()
                    # 回复兜底信息
                    itchat.send(
                        "私人 bot 激活成功，很高兴为您服务，服务有效果为 30 天。",
                        toUserName=msg['FromUserName']
                    )
                    return None
            else:
                update_date_obj = datetime.datetime.strptime(str(user_secret_infos[0][4].date()), '%Y-%m-%d')
                today_date_obj = datetime.datetime.strptime(str(datetime.date.today()), '%Y-%m-%d')
                # 计算两个日期之间的天数差值
                delta = today_date_obj - update_date_obj
                delta_days = delta.days

                if delta_days > 30:
                    # 回复兜底信息
                    itchat.send(
                        "当前服务已到期，机器人 bot 期待为您再次提供服务。",
                        toUserName=msg['FromUserName']
                    )
                    return None
                else:
                    pass

        if msg["Content"].startswith("/help"):
            itchat.send(
                "@{} 欢迎使用MJBOT机器人\n------------------------------\n🎨 生成图片命令 \n输入: /imagine prompt\n<prompt> 即你向mj提的绘画需求\n------------------------------\n🌈 变换图片命令 ️\n输入: /up asdf1234567 U1\n输入: /up asdf1234567 V1\n<asdf1234567> 代表消息ID，<U>代表放大，<V>代表细致变化，<1>代表第几张图\n------------------------------\n📕 附加参数\n1.解释：附加参数指的是在prompt后携带的参数，可以使你的绘画更加别具一格· 输入 /imagine prompt --v 5 --ar 16:9\n2.使用：需要使用--key value ，key和value之间需要空格隔开，每个附加参数之间也需要空格隔开\n3.详解：上述附加参数解释 <v>版本key <5>版本号 <ar>比例key，<16:9>比例value\n------------------------------\n📗 附加参数列表\n1.(--version) 或 (--v) 《版本》 参数 1，2，3，4，5 默认5，不可与niji同用\n2.(--niji)《卡通版本》 参数 空或 5 默认空，不可与版本同用\n3.(--aspect) 或 (--ar) 《横纵比》 参数 n:n ，默认1:1 ，不同版本略有差异，具体详见机器人提示\n4.(--chaos) 或 (--c) 《噪点》参数 0-100 默认0\n5.(--quality) 或 (--q) 《清晰度》参数 .25 .5 1 2 分别代表，一般，清晰，高清，超高清，默认1\n6.(--style) 《风格》参数 4a,4b,4c (v4)版本可用，参数 expressive,cute (niji5)版本可用\n7.(--stylize) 或 (--s)) 《风格化》参数 1-1000 v3 625-60000\n8.(--seed) 《种子》参数 0-4294967295 可自定义一个数值配合(sameseed)使用\n9.(--sameseed) 《相同种子》参数 0-4294967295 可自定义一个数值配合(seed)使用\n10.(--tile) 《重复模式》参数 空".format(msg['User']['NickName']),
                toUserName=msg['FromUserName']
            )

        if msg["Content"].startswith("/imagine"):
            # 如果开头包含 /imagine 则发送 prompt 后回复消息已收到
            # 获取 origin_prompt
            origin_prompt = msg["Content"].replace("/imagine", "").replace("'", " ").replace("\n", " ")

            baidu = BaiduTranslate()
            pic_url_list = re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', origin_prompt)
            if len(pic_url_list) > 0:
                origin_prompt_without_pic = origin_prompt
                # 如果是图生图，将图片链接过滤掉再翻译
                for pic_url in pic_url_list:
                    origin_prompt_without_pic = origin_prompt_without_pic.replace(pic_url, "")
                # 获取 trans_prompt
                trans_prompt = baidu.translate(origin_prompt_without_pic).get("result").get('trans_result')[0]['dst'].replace("'", " ").strip()[0:1500]
                trans_prompt = re.sub(r'[^a-zA-Z0-9\s]+', '', trans_prompt).lower()
                print(trans_prompt)
                # 加参数 加图片链接
                final_prompt = " ".join(pic_url_list) + " " + trans_prompt + " " + origin_prompt.replace(origin_prompt.split('--')[0], "")
                print(final_prompt)
            else:
                # 如果不是图生图
                # 获取 trans_prompt
                trans_prompt = baidu.translate(origin_prompt).get("result").get('trans_result')[0]['dst'].replace("'", " ").strip()[0:1500]
                trans_prompt = re.sub(r'[^a-zA-Z0-9\s]+', '', trans_prompt).lower()
                print(trans_prompt)
                final_prompt = trans_prompt + " " + origin_prompt.replace(origin_prompt.split('--')[0], "")
                print(final_prompt)


            self.mjsender.send(final_prompt)
            cursor.execute(
                "INSERT INTO `Robot`.`tb_mj_task` (`origin_prompt`, `trans_prompt`, `wx_user_id`, `wx_nickname`, `image_url`, `status`, `mj_task_id`, `wx_bot_user_id`) VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}')".format(
                    origin_prompt,
                    trans_prompt,
                    msg['FromUserName'],
                    msg['User']['NickName'],
                    "",
                    "sent",
                    "0",
                    itchat.instance.storageClass.userName
                ))
            self.conn.commit()
            cursor.execute(
                "SELECT id FROM `Robot`.`tb_mj_task` WHERE `origin_prompt`='{}' and `trans_prompt`='{}' and `wx_user_id`='{}' and `wx_nickname`='{}' and `image_url`='{}' and `status`='{}' and `mj_task_id`='{}' and `wx_bot_user_id`='{}'".format(
                    origin_prompt,
                    trans_prompt,
                    msg['FromUserName'],
                    msg['User']['NickName'],
                    "",
                    "sent",
                    "0",
                    itchat.instance.storageClass.userName
                ))
            temp_id=cursor.fetchall()[0][0]
            itchat.send(
                "@{} \n🌟任务已经发送至 Midjourney，\n🌟任务 ID：{}\n✨prompt: {}".format(msg['User']['NickName'], temp_id, origin_prompt),
                toUserName=msg['FromUserName']
            )

        if msg["Content"].startswith("/up"):
            up_info = msg["Content"].split(" ")
            if len(up_info) == 3:
                # 查询 message_info
                cursor.execute("SELECT mj_done_msg FROM `Robot`.`tb_mj_task` WHERE `id`='{}'".format(up_info[1]))
                mj_done_msg_str = cursor.fetchall()[0][0]
                if mj_done_msg_str != None:
                    mj_done_msg = json.loads(mj_done_msg_str)
                    print(mj_done_msg["components"])


                    u_component = mj_done_msg["components"][0]["components"]
                    for component in u_component:
                        if component.get("label") == up_info[2]:
                            print("进行 {} 变换".format(up_info[2]))
                            print(component)
                            self.mjsender.send_UVX(
                                message_id=mj_done_msg["id"],
                                custom_id=component["custom_id"],
                                component_type=component["type"]
                            )
                            # 将变换任务定义为普通任务入库
                            cursor.execute(
                                "INSERT INTO `Robot`.`tb_mj_task` (`origin_prompt`, `trans_prompt`, `wx_user_id`, `wx_nickname`, `image_url`, `status`, `mj_task_id`, `wx_bot_user_id`) VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}')".format(
                                    up_info[2],
                                    "",
                                    msg['FromUserName'],
                                    msg['ActualNickName'],
                                    "",
                                    "sent",
                                    mj_done_msg["id"],
                                    itchat.instance.storageClass.userName
                                ))
                            self.conn.commit()
                            cursor.execute(
                                "SELECT id FROM `Robot`.`tb_mj_task` WHERE `origin_prompt`='{}' and `trans_prompt`='{}' and `wx_user_id`='{}' and `wx_nickname`='{}' and `image_url`='{}' and `status`='{}' and `mj_task_id`='{}' and `wx_bot_user_id`='{}'".format(
                                    up_info[2],
                                    "",
                                    msg['FromUserName'],
                                    msg['ActualNickName'],
                                    "",
                                    "sent",
                                    mj_done_msg["id"],
                                    itchat.instance.storageClass.userName
                                ))
                            temp_id = cursor.fetchall()[0][0]
                            # 发送变换任务入库的信息
                            itchat.send(
                                "@{} \n✅你的变换任务已提交\n🌟原始任务 ID：{}\n🌟变换任务 ID: {}\n💫变换类型: {}\n🚀正在快速处理中,请稍后!".format(msg['User']['NickName'], up_info[1], temp_id, up_info[2]),
                                toUserName=msg['FromUserName']
                            )



                    v_component = mj_done_msg["components"][1]["components"]
                    for component in v_component:
                        if component.get("label") == up_info[2]:
                            print("进行 {} 变换".format(up_info[2]))
                            print(component)
                            self.mjsender.send_UVX(
                                message_id=mj_done_msg["id"],
                                custom_id=component["custom_id"],
                                component_type=component["type"]
                            )
                            # 将变换任务定义为普通任务入库
                            cursor.execute(
                                "INSERT INTO `Robot`.`tb_mj_task` (`origin_prompt`, `trans_prompt`, `wx_user_id`, `wx_nickname`, `image_url`, `status`, `mj_task_id`, `wx_bot_user_id`) VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}')".format(
                                    up_info[2],
                                    "",
                                    msg['FromUserName'],
                                    msg['ActualNickName'],
                                    "",
                                    "sent",
                                    mj_done_msg["id"],
                                    itchat.instance.storageClass.userName
                                ))
                            self.conn.commit()
                            cursor.execute(
                                "SELECT id FROM `Robot`.`tb_mj_task` WHERE `origin_prompt`='{}' and `trans_prompt`='{}' and `wx_user_id`='{}' and `wx_nickname`='{}' and `image_url`='{}' and `status`='{}' and `mj_task_id`='{}' and `wx_bot_user_id`='{}'".format(
                                    up_info[2],
                                    "",
                                    msg['FromUserName'],
                                    msg['ActualNickName'],
                                    "",
                                    "sent",
                                    mj_done_msg["id"],
                                    itchat.instance.storageClass.userName
                                ))
                            temp_id = cursor.fetchall()[0][0]
                            # 发送变换任务入库的信息
                            itchat.send(
                                "@{} \n✅你的变换任务已提交\n🌟原始任务 ID：{}\n🌟变换任务 ID：{}\n💫变换类型: {}\n🚀正在快速处理中,请稍后!".format(msg['User']['NickName'], up_info[1], temp_id, up_info[2]),
                                toUserName=msg['FromUserName']
                            )

            else:
                itchat.send(
                    "@{} \n❌请输入正确的格式哦：/up 任务id 变换类型".format(msg['User']['NickName']),
                    toUserName=msg['FromUserName']
                )
            pass

        cursor.close()





